package com.techsoft.poolsmgr;

import java.sql.Connection;

import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.techsoft.interfaces.IPoolService;

public class PoolService implements IPoolService {

	private boolean issystem;

	public boolean isIssystem() {
		return issystem;
	}

	public void setIssystem(boolean issystem) {
		this.issystem = issystem;
	}

	private PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
	@SuppressWarnings("unused")
	private static Log log = LogFactory.getLog(PoolService.class);

	/**
	 * @param 数据库驱动名称
	 * @throws Exception
	 */
	private PoolService(String jdbcdrivername) throws Exception {
		pds.setConnectionFactoryClassName(jdbcdrivername);
	}

	/**
	 * @param 数据库驱动名称
	 * @param 数据库的连接参数
	 * @throws Exception
	 */
	public PoolService(String jdbcdrivername, String url) throws Exception {
		this(jdbcdrivername);
		pds.setURL(url);
	}

	/**
	 * @param 数据库驱动名称
	 * @param 数据库的连接参数
	 * @param 客户的唯一标识
	 *            ，可能是客户的ID，代码或者名称
	 * @throws Exception
	 */
	public PoolService(String jdbcdrivername, String url, String customername)
			throws Exception {
		this(jdbcdrivername, url);
		pds.setConnectionPoolName(customername);
	}

	/**
	 * @param 数据库驱动名称
	 * @param 数据库的连接参数
	 * @param 客户的唯一标识
	 *            ，可能是客户的ID，代码或者名称
	 * @param 数据库的账号名称
	 * @param 数据库账号密码
	 * @throws Exception
	 */
	public PoolService(String jdbcdrivername, String url, String customername,
			String username, String password) throws Exception {
		this(jdbcdrivername, url, customername);
		pds.setUser(username);
		pds.setPassword(password);
	}

	/**
	 * @param 数据库驱动名称
	 * @param 数据库的连接参数
	 * @param 客户的唯一标识
	 *            ，可能是客户的ID，代码或者名称
	 * @param 数据库的账号名称
	 * @param 数据库账号密码
	 * @param 数据库最小连接数
	 * @param 数据库最大连接数
	 * @param 数据库初始化连接数
	 * @throws Exception
	 */
	public PoolService(String jdbcdrivername, String url, String customername,
			String username, String password, int minPool, int maxPool,
			int initPool) throws Exception {
		this(jdbcdrivername, url, customername, username, password);
		pds.setMinPoolSize(minPool);
		pds.setMaxPoolSize(maxPool);
		pds.setInitialPoolSize(initPool);
	}

	public Connection getConnecion() throws Exception {
		Connection result = null;
		if (pds.getAvailableConnectionsCount() > 0) {
			result = pds.getConnection();
		}
		return result;
	}
}
